home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #3 & #4
/
Amiga Plus CD - 1995 - No. 3 and 4.iso
/
pd
/
sound
/
cybersound
/
cdplayer
/
source
/
deliplayer.i
< prev
next >
Wrap
Text File
|
1995-07-20
|
14KB
|
391 lines
**
** $Filename: misc/DeliPlayer.i $
** $Release: 2.0 $
** $Revision: 2.10$
** $Date: 05/02/95$
**
** Definitions and Macros for creating DeliTracker Player&Genie-modules
**
** (C) Copyright 1991, 1992, 1993, 1994, 1995 Delirium Softdesign
** All Rights Reserved
**
IFND DELITRACKER_PLAYER_I
DELITRACKER_PLAYER_I SET 1
IFND EXEC_PORTS_I
INCLUDE "exec/ports.i"
ENDC
IFND EXEC_TYPES_I
INCLUDE "exec/types.i"
ENDC
IFND UTILITY_TAGITEM_I
INCLUDE "utility/tagitem.i"
ENDC
;----------------------------------------------------------------------------
DELIVERSION EQU 17 ; Current Version of DeliTracker
DELIREVISION EQU 4 ; Current Revision of DeliTracker
;------------------------ Player Function Offsets ---------------------------
STRUCTURE DeliTrackerPlayer,0
STRUCT dtp_RTS_code,4 ; RTS for security (private !)
STRUCT dtp_ID,8 ; Identifier (private !)
APTR dtp_TagArray ; pointer to TagItem array
LABEL dtp_SIZE
* The TagItem ID's (ti_Tag values) for the player interface follow.
DTP_TagBase EQU TAG_USER+$4454
ENUM DTP_TagBase ; TagBase
EITEM DTP_InternalPlayer ; obsolete
EITEM DTP_CustomPlayer ; player is a customplayer
EITEM DTP_RequestDTVersion ; minimum DeliTracker version needed
EITEM DTP_RequestKickVersion ; minimum KickStart version needed
DTP_RequestV37 EQU DTP_RequestKickVersion ; obsolete
EITEM DTP_PlayerVersion ; actual player version & revision
EITEM DTP_PlayerName ; name of this player
EITEM DTP_Creator ; misc string
EITEM DTP_Check1 ; Check Format before loading
EITEM DTP_Check2 ; Check Format after file is loaded
EITEM DTP_ExtLoad ; Load additional files
EITEM DTP_Interrupt ; Interrupt routine
EITEM DTP_Stop ; Clear Patterncounter
EITEM DTP_Config ; Config Player
EITEM DTP_UserConfig ; User-Configroutine
EITEM DTP_SubSongRange ; Get min&max subsong number
EITEM DTP_InitPlayer ; Initialisize the Player
EITEM DTP_EndPlayer ; Player clean up
EITEM DTP_InitSound ; Soundinitialisation routine
EITEM DTP_EndSound ; End sound
EITEM DTP_StartInt ; Start interrupt
EITEM DTP_StopInt ; Stop interrupt
EITEM DTP_Volume ; Set Volume
EITEM DTP_Balance ; Set Balance
EITEM DTP_Faster ; Incease playspeed
EITEM DTP_Slower ; Decrease playspeed
EITEM DTP_NextPatt ; Jump to next pattern
EITEM DTP_PrevPatt ; Jump to previous pattern
EITEM DTP_NextSong ; Play next subsong
EITEM DTP_PrevSong ; Play previous subsong
;--- functions in revision 14 (distributed as Release 1.35) ---
EITEM DTP_SubSongTest ; Test, if given subsong is vaild
;--- functions in revision 16 (distributed as Release 2.01) ---
EITEM DTP_NewSubSongRange ; enhanced replacement for DTP_SubSongRange
EITEM DTP_DeliBase ; the address of a pointer where DT
; stores a pointer to the DeliGlobals
EITEM DTP_Flags ; misc Flags (see below)
EITEM DTP_CheckLen ; Length of the Check Code
EITEM DTP_Description ; misc string
EITEM DTP_Decrunch ; pointer to Decrunch Code
EITEM DTP_Convert ; pointer to Converter Code
EITEM DTP_NotePlayer ; pointer to a NotePlayer Structure
EITEM DTP_NoteStruct ; the address of a pointer to the
; NoteStruct Structure
EITEM DTP_NoteInfo ; a pointer where DT stores a pointer
; to the current NoteStruct Structure
EITEM DTP_NoteSignal ; pointer to NoteSignal code
EITEM DTP_Process ; pointer to process entry code
EITEM DTP_Priority ; priority of the process
EITEM DTP_StackSize ; stack size of the process
EITEM DTP_MsgPort ; a pointer where DT stores a pointer
; to a port to send its messages
EITEM DTP_Appear ; open your window, if you can
EITEM DTP_Disappear ; go dormant
EITEM DTP_ModuleName ; get the name of the current module
EITEM DTP_FormatName ; get the name of the module format
EITEM DTP_AuthorName ; not implemented yet
;--- functions in revision 17 (distributed as Release 2.07) ---
EITEM DTP_InitNote ; NoteStruct initialization
EITEM DTP_PlayTime ; not implemented yet
*** end of player interface enumeration ***
; --- various flags ---------------------------------------------------------
BITDEF PLY,CUSTOM,0 ; the player is a customplayer
BITDEF PLY,SONGEND,1 ; this player supports songend
;--- flags defined in revision 17 (distributed as Release 2.07) ---
BITDEF PLY,ANYMEM,2 ; modules of this player don't require chipmem
; --- DeliTracker message ---------------------------------------------------
STRUCTURE DeliMessage,MN_SIZE
ULONG DTMN_Function ; function pointer
ULONG DTMN_Result ; store the result here
LABEL DTMN_SIZE
;------------------------------ Player Header -------------------------------
;
; Here is the MACRO for creating the player header structure. Use this MACRO !!!
PLAYERHEADER MACRO
IFC '\2',''
moveq #-1,d0 ; this should return an error
rts ; in case someone tried to run it
ELSE
bra.w \2 ; branch to startupcode
ENDC
dc.b 'DELIRIUM' ; identifier
dc.l \1 ; ^tagitem array
ENDM
;------ When a subroutine in the player is called, A5 will contain
;------ the pointer to the DeliTrackerGlobals, the only exeption is
;------ of course the interrupt routine.
;------ The interruptroutine is called every 1/50 sec (via timerint).
;------ When Check is called, supply d0=0 if the format is ok
;------ else d0<>0.
;------ Check1 is called before loading the complete file, you can
;------ check in the first 1024 Bytes of the file. If the file is
;------ smaller than 1kB, the remaining space will contain zero.
;------ Check2 is called after the complete file is loaded, you
;------ can use dtg_ChkSize to determine the length of the file.
;------ If you supply this tag the file can be crunched.
;------ ExtLoad: routine for loading additional files (instruments).
;------ If successful, you must return d0=0 else d0<>0. In case of
;------ an error DeliTracker frees all memory used for this module.
;------ InitPlayer: Here you should allocate the audio channels.
;------ In case the player supports multi-modules, you must set here
;------ dtg_SndNum to the minimal subsong number (not necessary if
;------ you have supplied a DTP_SubSongRange routine!).
;------ If successful, you must return d0=0 else d0<>0.
;------ EndPlayer: Here you should free the audio channels.
;------ InitSound: If you want to use the internal interrupt but don't
;------ need the default 50 Hz frequency, you can write another timer
;------ value into dtg_Timer.
;------ It is recommended to use DTP_SubSongRange/DTP_SubSongTest
;------ instead of DTP_NextSong/DTP_PrevSong.
;------ Volume usually only copies the values dtg_Volume, dtg_SndLBal
;------ and dtg_SndRBal to an internal buffer. The interrupt code has
;------ access to this buffer and can set the volume correct.
;------ CheckLen: This tag is only allowed for players. If you supply
;------ this tag, the player will be unloaded by DeliTracker in low
;------ memory situations. When needed, it will be loaded again
;------ automatically.
;------ Decrunch: Supply d0=0 if you could decrunch the file else
;------ d0<>0.
;------ Convert: Supply d0=0 if you converted the file to another
;------ format, else d0<>0.
;------ Appear: Supply d0<>0 if the window was already opend, else
;------ d0=0.
;------ Disappear: Supply d0=0 if the window was already closed, else
;------ d0<>0.
;------ ModuleName: This tag is only allowed for players. It contains
;------ the address of a pointer to the module name (must be null
;------ terminated). The tag is evaluated after the InitPlayer function
;------ was called.
;------ FormatName: This tag is only allowed for convert genies. It
;------ contains the address of a pointer to the name of the module
;------ format (must be null terminated). The tag is evaluated after
;------ the InitPlayer function was called.
;------ AuthorName: This tag is only allowed for players. It contains
;------ the address of a pointer to the authorname (must be null
;------ terminated). The tag is evaluated after the InitPlayer function
;------ was called.
;------ Note: the Player can consist of more Hunks. That means you
;------ can seperate CHIP DATA form CODE (and you should do this!).
;---------------------------- Global Variables ------------------------------
STRUCTURE DeliTrackerGlobals,0
;------ if you use dtg_AslBase, make sure that
;------ DTP_RequestDTVersion is at least 13 !
APTR dtg_AslBase ; librarybase don't CloseLibrary()
APTR dtg_DOSBase ; librarybase -"-
APTR dtg_IntuitionBase ; librarybase -"-
APTR dtg_GfxBase ; librarybase -"-
APTR dtg_GadToolsBase : librarybase -"- (NULL for Kick 1.3 and below)
APTR dtg_ReservedLibraryBase ; reserved for future use
APTR dtg_DirArrayPtr ; Ptr to the directory of the current module
APTR dtg_FileArrayPtr ; Ptr to the filename of the current module
APTR dtg_PathArrayPtr ; Ptr to PathArray (e.g used in LoadFile())
APTR dtg_ChkData ; pointer to the module to be checked
ULONG dtg_ChkSize ; size of the module
UWORD dtg_SndNum ; current sound number
UWORD dtg_SndVol ; volume (ranging from 0 to 64)
UWORD dtg_SndLBal ; left volume (ranging from 0 to 64)
UWORD dtg_SndRBal ; right volume (ranging from 0 to 64)
UWORD dtg_LED ; filter (0 if the LED is off)
UWORD dtg_Timer ; timer-value for the CIA-Timers
FPTR dtg_GetListData ;
FPTR dtg_LoadFile ;
FPTR dtg_CopyDir ;
FPTR dtg_CopyFile ;
FPTR dtg_CopyString ;
FPTR dtg_AudioAlloc ;
FPTR dtg_AudioFree ;
FPTR dtg_StartInt ;
FPTR dtg_StopInt ;
FPTR dtg_SongEnd ; save to call from interrupt code !
FPTR dtg_CutSuffix ;
;------ extension in revision 14
FPTR dtg_SetTimer ; save to call from interrupt code !
;------ extension in revision 15
FPTR dtg_WaitAudioDMA ; save to call from interrupt code !
;------ extension in revision 16
FPTR dtg_LockScreen
FPTR dtg_UnlockScreen
FPTR dtg_NotePlayer ; save to call from interrupt code !
FPTR dtg_AllocListData
FPTR dtg_FreeListData
FPTR dtg_Reserved1 ; do not use !!!
FPTR dtg_Reserved2 ; do not use !!!
FPTR dtg_Reserved3 ; do not use !!!
; There is no dtg_SIZEOF cause ...
;------ GetListData(Num:d0): This function returns the memorylocation
;------ of a loaded file in a0 and its size in d0. Num starts with 0
;------ (the selected module). Example: GetListData(2) returns the
;------ start of the third file loaded (via ExtLoad) in a0 an its size
;------ in d0.
;------ LoadFile(): this function may only be called in the ExtLoad
;------ routine. file/pathname must be in dtg_PathArrayPtr then
;------ this function will attempt to load the file into CHIPMEM
;------ (and DECRUNCH it). If everything went fine, d0 will be zero.
;------ If d0 is not zero this indicates an error (e.g. read error,
;------ not enough memory, ...).
;------ CopyDir(): this function copies the pathname at the end
;------ of the string in dtg_PathArrayPtr(a5).
;------ CopyFile(): this function copies the filename at the end
;------ of the string in dtg_PathArrayPtr(a5).
;------ CopyString(Ptr:a0): this function copies the string in a0
;------ at the end of the string in dtg_PathArrayPtr(a5).
;------ AudioAlloc(): this function allocates the audiochannels
;------ (only necessary if the player doesn't supply a NoteStruct
;------ tag). If d0=0 all is ok, d0<>0 indicates an error.
;------ AudioFree(): this function frees the audiochannels allocated
;------ with AudioAlloc().
;------ StartInt(): this function starts the timer-interrupt.
;------ StopInt(): this function stops the timer-interrupt started
;------ with StartInt().
;------ SongEnd(): signal the songend to DeliTracker.
;------ This call is guaranteed to preserve all registers.
;------ CutSuffix(): this function removes the suffix '.xpk' or '.pp'
;------ from the string in dtg_PathArrayPtr(a5).
;------ SetTimer(): programs the CIA-Timer with the value supplied
;------ in dtg_Timer(a5). Only useful, if the internal timer-interrupt
;------ is used. This call is guaranteed to preserve all registers.
;------ WaitAudioDMA(): DMA delay wait. Only allowed, if the internal
;------ timer-interrupt is used. This call is guaranteed to preserve
;------ all registers.
;------ LockScreen(): this function tries to lock DeliTracker's screen.
;------ It returns the screenpointer in d0 or NULL on failure.
;------ UnlockScreen(): this function unlocks DeliTracker's screen.
;------ do not unlock a screen more times than it was locked!
;------ NotePlayer(): this call plays the notes specified in the
;------ current NoteStruct structure. This function call is not allowed
;------ if the active player doesn't have a valid NotePlayer structure.
;------ do not call this function in interrupt code at interrupt
;------ level 5 or higher! This call is guaranteed to preserve
;------ all registers.
;------ AllocListData(Size:d0/Flags:d1): This is the memory allocator
;------ for module specific memory to be used by all players and genies.
;------ It provides a means of specifying that the allocation should be
;------ made in a memory area accessible to the chips, or accessible to
;------ shared system memory. If the allocation is successful,
;------ DeliTracker will keep track of the new block (GetListData() will
;------ return the location and size of this block).
;------ byteSize - the size of the desired block in bytes.
;------ Flags - the flags are passed through to AllocMem().
;------ A pointer to the newly allocated memory block is returned in d0.
;------ If there are no free memory regions large enough to satisfy the
;------ request, zero will be returned. The pointer must be checked
;------ for zero before the memory block may be used!
;------ FreeListData(MemBlock:a1): Free a region of memory allocated
;------ with AllocListData(), returning it to the system pool from which
;------ it came.
;------ memoryBlock - pointer to the memory block to free, or NULL.
ENDC ; DELITRACKER_PLAYER_I